Ao iniciar a análise dos dados, me deparei com um problema nos arquivos JSON. Eles não possuiam uma formatação que o pandas reconhecia. Ao que parecia, cada linha era um arquivo JSON. Então, coloquei um colchete ( [ ) no início e outro no fim do arquivo ( ] ), e uma vírgula no fim de cada linha, com exceção da última, que fecha o JSON.

Os prints exibidos nas células, estão na pasta /images, e os códigos que geraram eles estão no arquivo dataPrevious.ipynb.

Primeiro, é preciso importar os pacotes necessários!

Agora vou testar se todos os arquivos necessários estão na pasta!
Caso algum não esteja, uma mensagem de erro será exibida!

E agora o código irá ler todos os arquivos necessários e colocar cada um em um DataFrame da biblioteca Pandas!
Os quatro arquivos .JSON serão agrupados em um único DataFrame!

Nesta Análise, irei responder as seguintes perguntas:

  1. Qual a distância média percorrida por viagens com no máximo 2 passageiros?
  2. Quais os 3 maiores vendors em quantidade total de dinheiro arrecadado?
  3. Fazer um histograma da distribuição mensal, nos 4 anos, de corridas pagas em dinheiro.
  4. Fazer um gráfico de série temporal contando a quantidade de gorjetas de cada dia, nos últimos 3 meses de 2012.
  5. Qual o tempo médio das corridas nos dias de sábado e domingo.
  6. Fazer uma visualização em mapa com latitude e longitude de pickups and dropoffs no ano de 2010.

1 - Qual a distância média percorrida por viagens com no máximo 2 passageiros?

Realizada a primeira busca nos arquivos, usando apenas um arquivo para agilizar o processamento, o resultado é esse abaixo:

Intessante, não existe uma grande diferença relacional entre a distância média e a quantidade de passageiros.
Irei rodar o código completo e já gerar o gráfico.

Como exibido na prévia com dados brutos, não existe uma grande diferença entre as distâncias médias.

2 - Quais os 3 maiores vendors em quantidade total de dinheiro arrecadado?

Para responder essa pergunta, será necessário usar o arquivo com os dados das companhias de taxi, que está na variável dfDataVendors
Veja esse arquivo, sem nenhum tratamento, na imagem abaixo.


Agora veja um busca simples no arquivo das corridas usando como parâmetro o campo vendor_id com os dados de todas as companhias, exibindo as colunas com os valores das corridas.


Muito interessante. Para contar o faturamento, é possível fazer de duas maneiras. Somente valor das tarifas, com sobre-taxas, ou o total recebido em cada corrida (incluindo gorgetas e pedágios).
Para isso, vou somar todos os valores dos respectivos campos, para cada companhia de Taxi.
Veja o resultado dessa busca.

Hum. Uma das companhias não teve nenhum faturamento no período e outra um faturamento quase inexistente.
Vou usar um recurso do Pandas para pegar apenas os três maiores, pensando em um cenário onde houvessem muito mais companhias e com faturamentos semelhantes. Veja o resultado do filtro!

Agora irei rodar o código completo e já criar o gráfico do tipo de barras agrupadas, para exibir os dois filtros de faturamento.
Faturamento Total e Somente Tarifa

Gráfico que deixa bem claro a distribuição de faturamentos das três maiores companhias de Taxi de Nova York. Vejas os Números:

3 - Fazer um histograma da distribuição mensal, nos 4 anos, de corridas pagas em dinheiro.

Esse tipo de busca, com datas, será necessário converter as colunas de embarque e desembarque.
No momento irei converter apenas o campo embarque por er suficiente para o que preciso. Veja um exemplo da coluna datetime convertida e outra sem conversão na imagem abaixo;

Agora faço uma busca trazendo apenas os dados das corridas pagas em dinheiro, e faço a contagem por mês.
Veja os dados resultantes do ano de 2010.

[66179, 66837, 73616, 71075, 73663, 70987, 73487, 73358, 71113, 73648, 70876, 25874]

Agora vou rodar o código completo, coletando os dados dos quatro anos, separá-los por mês, e gerar o histograma!

Muito legal esse histograma!
Nele é possível identificar que houveram;

4 - Fazer um gráfico de série temporal contando a quantidade de gorjetas de cada dia, nos últimos 3 meses de 2012.

Para responder a essa pergunta, precisaremos coletar os dados separadamente de cada dia dos meses de Outubro a Dezembro, e somente as corridas onde o campo respectivo a gorgeta seja maior que zero.
Vejamos!

Ok! Até aqui tudo bem, já temos os dados.
Vamos ver como eles ficam após separarmos por dia!

Parece estar faltando alguns dados no final do arquivo.
Vamos detalhar para visualizar melhor.

Abaixo estão os dados dos meses de Julho a Setembro.

Agora sim parece estar tudo certo.
Vou rodar o código completo.
Na célula de saída da função estão os meses de Julho a Setembro.
Abaixo colocarei uma imagem dos gráficos de Outubro a Dezembro.
Assim podemos comparar as séries temporais.

Sensacional!
Olhando apenas o primeiro gráfico, não parece haver um grande oscilação nos dias em que há ou não gorgeta. Mas quando se olha a Tendência e a Sazonalidade, fica muito mais evidente essa variação.
Agora vejamos os dados de Outubro a Dezembro.

Realmente fica difícil de se tirar qualquer informação além de que não existem os dados dos dois últimos meses.
A Tendência é completamente afetada pela queda brusca da falta de dados.

5 - Qual o tempo médio das corridas nos dias de sábado e domingo.

Para responder a essa pergunta, vamos precisar converter para datetime também a coluna de desembarque.
Em seguida, vamos armazenar separadamente em 3 dataFrame as corridas da seguinte forma;

Veja na imagem abaixo uma parte de cada um dos arquivos, separados pelas datas das corrida.

Agora basta efetuar a subtração dos datetimes para termos os tempos médios das corridas.

Parece não haver muita diferença no tempo do trajeto das pessoas que andam de taxi durante a semana e aos sábados, com uma quase imperceptível queda aos domingos.

A função mean do NumPy retornou um TimeDelta. Teremos que tratá-lo para conseguir enviar para o gráfico.

Vou rodar o código completo, já fazendo o tratamento dos tempos médios, e gerar um gráfico.

Ual. Todos os dias tiveram exatamente o mesmo tempo. Uma grande coincidência.
Eu testei com períodos menores de tempo e aí sim foi possível observar a diferença.

Vamos para a última pergunta.

6 - Fazer uma visualização em mapa com latitude e longitude de pickups and dropoffs no ano de 2010.

Essa foi a pergunta mais legal e mais simples de se responder, porém, para mim, a mais difícil de se conseguir exibir o resultado.
Isso porque eu usei o pacote externo Folium, que gera um mapa dentro do código, passando pouquíssimos parâmetros.
Porém, ele gera um gráfico interativo, e ao passar os dados das corridas (fui testando sempre colocando um zero a direita) ele travou meu pc mais de uma vez.
Portanto, aqui limitei a exibição das primeiras 1.000 corridas do ano de 2010.

Foi preciso apenas pegar os dados de Latitude e Longitude, dos embarques e desembarques.
Marcadores verdes são embarques, e vermelhos são desembarques.
Vejamos o resultado no mapa.

Agradeço imensamente pela oportunidade de mostrar o meu trabalho, e espero de coração que tenham gostado.
Fiquei muito feliz de conseguir chegar até onde cheguei com essa análise de dados, e estou ainda mais convicto de que escolhi a área certa para trabalhar. Passei algumas noites em claro pensando em como superar alguns obstáculos, e mesmo depois de superá-los eu ainda tentava aperfeiçoar o que tinha feita.
Acredito que eu tenha refatorado o código todo ao menos duas vezes (algumas funções foram muito mais).
Novamente, muito obrigado pela oportunidade.

João Paulo Rodrigues